// 组合继承效率较低（父构造函数被调用两次）
// function SuperType (name) {
//   this.name = name
//   this.colors = ['a', 'b', 'c']
// }

// SuperType.prototype.sayName = function () {
//   console.log(this.name)
// }

// function SubType (name, age) {
//   SuperType.call(this, name)  // 第一次调用父类构造函数
//   this.age = age
// }

// SubType.prototype = new SuperType() // 第二次调用父类构造函数
// SubType.prototype.constructor = SubType
// SubType.prototype.sayAge = function () {
//   console.log(this.age)
// }


// 寄生式继承 = 原型式继承 + 增强属性/方法
// 寄生式组合继承的本质就是  寄生式继承+原型链
function inheritPrototype (SubType, SuperType) {
  // 创建对象
  let prototype = Object.create(SuperType.prototype)
  // 增强对象
  prototype.constructor = SubType
  // 返回对象
  SubType.prototype = prototype
}


function SuperType (name) {
  this.name = name
  this.colors = ['a', 'b', 'c']
}

SuperType.prototype.sayName = function () {
  console.log(this.name)
}

function SubType (name, age) {
  SuperType.call(this, name)  // 第一次调用父类构造函数
  this.age = age
}

inheritPrototype(SubType, SuperType)

SubType.prototype.sayAge = function () {
  console.log(this.age)
}
